package br.sc.senai.dao;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import br.sc.senai.conexaoBanco.ConexaoMySQL;
import br.sc.senai.model.Cliente;

public class ClienteDAO {
	public void inserir(Cliente cliente) {
		try {
			Statement st = ConexaoMySQL.getConexaoMySQL().createStatement();
			String query;
			if (cliente.getCpf() != null) {
				query = "INSERT INTO cliente (nome, cpf, telefone, email, endereco, cidade, cep, dataCadastro) VALUES ('"
						+ cliente.getNome()
						+ "', '"
						+ cliente.getCpf()
						+ "', '"
						+ cliente.getTelefone()
						+ "', '"
						+ cliente.getEmail()
						+ "', '"
						+ cliente.getEndereco()
						+ "', '"
						+ cliente.getCidade()
						+ "', '"
						+ cliente.getCep()
						+ "', '"
						+ new SimpleDateFormat("yyyy-MM-dd").format(new Date())
						+ "');";
			} else {
				query = "INSERT INTO cliente (nome, cnpj, telefone, email, endereco, cidade, cep, dataCadastro) VALUES ('"
						+ cliente.getNome()
						+ "', '"
						+ cliente.getCnpj()
						+ "', '"
						+ cliente.getTelefone()
						+ "', '"
						+ cliente.getEmail()
						+ "', '"
						+ cliente.getEndereco()
						+ "', '"
						+ cliente.getCidade()
						+ "', '"
						+ cliente.getCep()
						+ "', '"
						+ new SimpleDateFormat("yyyy-MM-dd").format(new Date())
						+ "');";
			}
			st.execute(query);
			st.close();
		} catch (SQLException e) {
			System.out.println("SQL Exception - dao.ClienteDAO.Inserir()");
		}
	}

	public void alterar(Cliente cliente) {
		try {
			Statement st = ConexaoMySQL.getConexaoMySQL().createStatement();
			String query;
			if (cliente.getCpf() != null) {
				query = "UPDATE cliente SET nome = '" + cliente.getNome()
						+ "', cpf = '" + cliente.getCpf() + "', telefone = '"
						+ cliente.getTelefone() + "', email = '"
						+ cliente.getEmail() + "', endereco = '"
						+ cliente.getEndereco() + "', cidade = '"
						+ cliente.getCidade() + "', cep = '" + cliente.getCep()
						+ "';";
			} else {
				query = "UPDATE cliente SET nome = '" + cliente.getNome()
						+ "', cnpj = '" + cliente.getCnpj() + "', telefone = '"
						+ cliente.getTelefone() + "', email = '"
						+ cliente.getEmail() + "', endereco = '"
						+ cliente.getEndereco() + "', cidade = '"
						+ cliente.getCidade() + "', cep = '" + cliente.getCep()
						+ "';";
			}

			st.execute(query);
			st.close();
		} catch (SQLException e) {
			System.out.println("SQL Exception - dao.ClienteDAO.Inserir()");
		}
	}

	public ArrayList<Cliente> consultar() {
		try {
			Statement st = ConexaoMySQL.getConexaoMySQL().createStatement();
			String query = "SELECT * FROM cliente WHERE status = 1;";
			ResultSet rs = st.executeQuery(query);
			ArrayList<Cliente> clientes = new ArrayList<Cliente>();
			while (rs.next()) {
				Cliente cliente = new Cliente(rs.getInt("idCliente"),
						rs.getString("nome"), rs.getString("cpf"),
						rs.getString("cnpj"), rs.getString("telefone"),
						rs.getString("email"), rs.getString("endereco"),
						rs.getString("cidade"), rs.getString("cep"),
						rs.getDate("dataCadastro"),
						rs.getInt("status") == 1 ? true : false);
				clientes.add(cliente);
			}
			return clientes;
		} catch (SQLException e) {
			System.out.println("SQL Exception - dao.ClienteDAO.consultar()");
			return null;
		}
	}

	public Cliente consultarPorID(Integer idCliente) {
		try {
			Statement st = ConexaoMySQL.getConexaoMySQL().createStatement();
			String query = "SELECT * FROM cliente WHERE idCliente = "
					+ idCliente + ";";
			ResultSet rs = st.executeQuery(query);
			Cliente cli = new Cliente();
			while (rs.next()) {
				cli = new Cliente(idCliente, rs.getString("nome"),
						rs.getString("cpf"), rs.getString("cnpj"),
						rs.getString("telefone"), rs.getString("email"),
						rs.getString("endereco"), rs.getString("cidade"),
						rs.getString("cep"), rs.getDate("dataCadastro"),
						rs.getInt("status") == 1 ? true : false);
			}
			return cli;
		} catch (SQLException e) {
			System.out
					.println("SQL Exception - dao.ClienteDAO.consultarPorID()");
			return null;
		}
	}

	public ArrayList<Cliente> consultarPorNomeFisico(
			ArrayList<Cliente> clientesFisicos, String nome) {
		Cliente atual;
		ArrayList<Cliente> resultado = new ArrayList<Cliente>();
		for (int i = 0; i < clientesFisicos.size(); i++) {
			atual = clientesFisicos.get(i);
			if (atual.getNome().toLowerCase().contains(nome.toLowerCase())) {
				resultado.add(atual);
			}
		}
		return resultado;
	}

	public ArrayList<Cliente> consultarPorNomeJuridico(
			ArrayList<Cliente> clientesJuridicos, String nome) {
		Cliente atual;
		ArrayList<Cliente> resultado = new ArrayList<Cliente>();
		for (int i = 0; i < clientesJuridicos.size(); i++) {
			atual = clientesJuridicos.get(i);
			if (atual.getNome().toLowerCase().contains(nome.toLowerCase())) {
				resultado.add(atual);
			}
		}
		return resultado;
	}

	public ArrayList<Cliente> consultarPorCPF(
			ArrayList<Cliente> clientesFisicos, String cpf) {
		Cliente atual;
		ArrayList<Cliente> resultado = new ArrayList<Cliente>();
		for (int i = 0; i < clientesFisicos.size(); i++) {
			atual = clientesFisicos.get(i);
			if (atual.getCpf().toLowerCase().contains(cpf.toLowerCase())) {
				resultado.add(atual);
			}
		}
		return resultado;
	}

	public ArrayList<Cliente> consultarPorCNPJ(
			ArrayList<Cliente> clientesJuridicos, String cnpj) {
		Cliente atual;
		ArrayList<Cliente> resultado = new ArrayList<Cliente>();
		for (int i = 0; i < clientesJuridicos.size(); i++) {
			atual = clientesJuridicos.get(i);
			if (atual.getCnpj().toLowerCase().contains(cnpj.toLowerCase())) {
				resultado.add(atual);
			}
		}
		return resultado;
	}

	public void excluir(Cliente cliente) {
		int id = cliente.getIdCliente();
		try {
			Statement st = ConexaoMySQL.getConexaoMySQL().createStatement();
			String query = "UPDATE cliente SET status = 0 WHERE idCliente = "
					+ id + " AND status = 1;";
			st.execute(query);
			st.close();
		} catch (SQLException e) {
			System.out.println("SQL Exception - dao.ClienteDAO.excluir()");
		}
	}
}